{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/sasse/.local/lib/python3.6/site-packages/matplotlib/__init__.py:886: MatplotlibDeprecationWarning: \n",
      "examples.directory is deprecated; in the future, examples will be found relative to the 'datapath' directory.\n",
      "  \"found relative to the 'datapath' directory.\".format(key))\n",
      "/home/sasse/.local/lib/python3.6/site-packages/h5py/__init__.py:34: FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is deprecated. In future, it will be treated as `np.float64 == np.dtype(float).type`.\n",
      "  from ._conv import register_converters as _register_converters\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os, sys\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import average_precision_score, precision_recall_curve\n",
    "sys.path.append(os.path.abspath('../GCN'))\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import matplotlib_venn\n",
    "import gcnIO, postprocessing\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(156, 2)\n",
      "embedding_0 -> AUPR: 0.76\n",
      "(156, 2)\n",
      "embedding_1 -> AUPR: 0.84\n",
      "(156, 2)\n",
      "embedding_2 -> AUPR: 0.82\n",
      "(156, 2)\n",
      "embedding_3 -> AUPR: 0.77\n",
      "(156, 2)\n",
      "embedding_4 -> AUPR: 0.79\n",
      "(156, 2)\n",
      "embedding_5 -> AUPR: 0.86\n",
      "(156, 2)\n",
      "embedding_6 -> AUPR: 0.75\n",
      "(156, 2)\n",
      "embedding_7 -> AUPR: 0.80\n",
      "(156, 2)\n",
      "embedding_8 -> AUPR: 0.85\n",
      "(156, 2)\n",
      "embedding_9 -> AUPR: 0.78\n",
      "(156, 2)\n",
      "embedding_10 -> AUPR: 0.79\n",
      "(156, 2)\n",
      "embedding_11 -> AUPR: 0.82\n",
      "(156, 2)\n",
      "embedding_12 -> AUPR: 0.77\n",
      "(156, 2)\n",
      "embedding_13 -> AUPR: 0.79\n",
      "(156, 2)\n",
      "embedding_14 -> AUPR: 0.83\n",
      "(156, 2)\n",
      "embedding_15 -> AUPR: 0.82\n",
      "(156, 2)\n",
      "embedding_16 -> AUPR: 0.82\n",
      "(156, 2)\n",
      "embedding_17 -> AUPR: 0.81\n",
      "(156, 2)\n",
      "embedding_18 -> AUPR: 0.79\n",
      "(156, 2)\n",
      "embedding_19 -> AUPR: 0.78\n",
      "(156, 2)\n",
      "embedding_20 -> AUPR: 0.77\n",
      "(156, 2)\n",
      "embedding_21 -> AUPR: 0.79\n",
      "(156, 2)\n",
      "embedding_22 -> AUPR: 0.78\n",
      "(156, 2)\n",
      "embedding_23 -> AUPR: 0.78\n",
      "(156, 2)\n",
      "embedding_24 -> AUPR: 0.83\n",
      "(156, 2)\n",
      "embedding_25 -> AUPR: 0.81\n",
      "(156, 2)\n",
      "embedding_26 -> AUPR: 0.80\n"
     ]
    }
   ],
   "source": [
    "gridsearch_dir = '/project/gcn/deepwalk/deepwalk_gridsearch/'\n",
    "data_file = '/project/gcn/diseasegcn/data/pancancer/CPDB_multiomics_omimallneg.h5'\n",
    "\n",
    "def get_model_performance(embedding_file, features, node_names, y_train, train_mask, y_test, test_mask, out_file=None):\n",
    "    deepwalk_embeddings = pd.read_csv(embedding_file, header=None, skiprows=1, sep=' ')\n",
    "    deepwalk_embeddings.columns = ['Node_Id'] + deepwalk_embeddings.columns[1:].tolist()\n",
    "    deepwalk_embeddings.set_index('Node_Id', inplace=True)\n",
    "    nodes = pd.DataFrame(node_names, columns=['ID', 'Name'])\n",
    "    embedding_with_names = deepwalk_embeddings.join(nodes)\n",
    "\n",
    "    X_dw = embedding_with_names.set_index('Name').reindex(nodes.Name).drop('ID', axis=1)\n",
    "    X_train_dw = X_dw[train_mask.astype(np.bool)]\n",
    "    X_test_dw = X_dw[test_mask.astype(np.bool)]\n",
    "    y_train_dw = y_train[train_mask.astype(np.bool)]\n",
    "    y_test_dw = y_test[test_mask.astype(np.bool)]\n",
    "\n",
    "    clf = SVC(kernel='rbf', class_weight='balanced', probability=True)\n",
    "    #clf = RandomForestClassifier()\n",
    "    #clf = LogisticRegression(class_weight='balanced')\n",
    "    clf.fit(X_train_dw, y_train_dw.reshape(-1))\n",
    "    pred_deepwalk = clf.predict_proba(X_test_dw)\n",
    "    print (pred_deepwalk.shape)\n",
    "    pr_dw, rec_dw, thresholds_dw = precision_recall_curve(y_true=y_test_dw,\n",
    "                                                          probas_pred=pred_deepwalk[:, 1])\n",
    "    aupr_dw = average_precision_score(y_true=y_test_dw, y_score=pred_deepwalk[:, 1])\n",
    "    if not out_file is None:\n",
    "        fig = plt.figure(figsize=(14, 8))\n",
    "        plt.plot(rec_dw, pr_dw, lw=6, label='DeepWalk (AUPR = {0:.2f})'.format(aupr_dw))\n",
    "        plt.legend()\n",
    "        print (os.path.dirname(embedding_file))\n",
    "        fig.savefig(os.path.join(os.path.dirname(embedding_file), out_file))\n",
    "    return aupr_dw\n",
    "\n",
    "\n",
    "data = gcnIO.load_hdf_data(path=data_file)\n",
    "network, features, y_train, y_val, y_test, train_mask, val_mask, test_mask, node_names, feat_names = data\n",
    "\n",
    "performances = []\n",
    "for param_file in os.listdir(gridsearch_dir):\n",
    "    if param_file.startswith('embedding_') and os.path.isfile(os.path.join(gridsearch_dir, param_file)):\n",
    "        perf = get_model_performance(embedding_file=os.path.join(gridsearch_dir, param_file),\n",
    "                                     features=features,\n",
    "                                     node_names=node_names,\n",
    "                                     y_train=y_train,\n",
    "                                     train_mask=train_mask,\n",
    "                                     y_test=y_val,\n",
    "                                     test_mask=val_mask,\n",
    "                                     out_file=None\n",
    "                                     #out_file='pr_curve_{}.svg'.format(param_file.split('_')[1])\n",
    "                                    )\n",
    "        print (\"{0} -> AUPR: {1:.2f}\".format(param_file, perf))\n",
    "        performances.append(perf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.6, 0.85)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nR1fVP1TVu6tqy7LXDqiqbbP9jx8xJwAAAAADjXa53F58/6OSPCLJoUneUVX37e7PJTmiu6+rqm9K\n8ndV9YHu/qflJ1fVaUlOS5LDDz98fZMDAAAA8J/GnMl0XZLDlm0fOtu33I4kW7v7y939z0k+lKXS\nKd193ezrNUkuTPKAXb9Bd5/Z3cd39/GbN29e+xEAAAAAMJcxS6aLkxxVVUdW1f5JTkmy613i3pKl\nWUypqrtl6fK5a6rqoKr6mmX7H5rk8gAAAACwTxrtcrnuvqmqTk9yfpJNSc7q7u1V9ZIk27p76+y1\nR1fV5UluTvKz3f2Zqvq2JL9fVbdkqQh72fK70gEAAACwbxl1TabuPi/Jebvse+Gy553kp2eP5cf8\n3yT3HTMbAAAAAGtnzMvlAAAAALiNUDIBAAAAMJiSCQAAAIDBlEwAAAAADKZkAgAAAGAwJRMAAAAA\ngymZAAAAABhMyQQAAADAYEomAAAAAAZTMgEAAAAwmJIJAAAAgMGUTAAAAAAMpmQCAAAAYDAlEwAA\nAACDKZkAAAAAGEzJBAAAAMBgSiYAAAAABlMyAQAAADCYkgkAAACAwZRMAAAAAAymZAIAAABgMCUT\nAAAAAIMpmQAAAAAYTMkEAAAAwGBKJgAAAAAGUzIBAAAAMJiSCQAAAIDBlEwAAAAADKZkAgAAAGAw\nJRMAAAAAgymZAAAAABhMyQQAAADAYEomAAAAAAZTMgEAAAAwmJIJAAAAgMGUTAAAAAAMpmQCAAAA\nYDAlEwAAAACDKZkAAAAAGEzJBAAAAMBgSiYAAAAABlMyAQAAADCYkgkAAACAwZRMAAAAAAymZAIA\nAABgMCUTAAAAAIMpmQAAAAAYTMkEAAAAwGBKJgAAAAAGUzIBAAAAMJiSCQAAAIDBlEwAAAAADKZk\nAgAAAGAwJRMAAAAAgymZAAAAABhMyQQAAADAYEomAAAAAAZTMgEAAAAwmJIJAAAAgMGUTAAAAAAM\npmQCAAAAYDAlEwAAAACDKZkAAAAAGEzJBAAAAMBgSiYAAAAABlMyAQAAADCYkgkAAACAwZRMAAAA\nAAymZAIAAABgMCUTAAAAAIMpmQAAAAAYTMkEAAAAwGBKJgAAAAAGUzIBAAAAMJiSCQAAAIDBlEwA\nAAAADKZkAgAAAGAwJRMAAAAAg41aMlXVlqq6qqqurqrnrXDMk6rq8qraXlWvXbb/KVX14dnjKWPm\nBAAAAGCY/cZ646ralOSMJI9KsiPJxVW1tbsvX3bMUUmen+Sh3X1DVR0823/XJC9KcnySTnLJ7Nwb\nxsoLAAAAwFdvzJlMJyS5uruv6e4bk7wuycm7HPO0JGfsLI+6+1Oz/Y9JckF3f3b22gVJtoyYFQAA\nAIABxiyZDkly7bLtHbN9yx1sJD0TAAAQUUlEQVSd5Oiq+oeqendVbdmLcwEAAADYR1R3j/PGVd+X\nZEt3//hs+4eTPKi7T192zLlJvpzkSUkOTfKOJPdN8uNJDujuX54d9wtJvtjdL9/le5yW5LTZ5j2T\nXDXKYHbvbkk+vY7fb70Z37QZ33Rt5LElxjd1xjddG3lsifFNnfFN10YeW2J8U2d8a+eI7t48z4Gj\nrcmU5Lokhy3bPnS2b7kdSd7T3V9O8s9V9aEkR82Oe8Qu51646zfo7jOTnLl2kedXVdu6+/hFfO/1\nYHzTZnzTtZHHlhjf1BnfdG3ksSXGN3XGN10beWyJ8U2d8S3GmJfLXZzkqKo6sqr2T3JKkq27HPOW\nzMqkqrpbli6fuybJ+UkeXVUHVdVBSR492wcAAADAPmi0mUzdfVNVnZ6lcmhTkrO6e3tVvSTJtu7e\nmq+USZcnuTnJz3b3Z5Kkqn4pS0VVkrykuz87VlYAAAAAhhnzcrl093lJzttl3wuXPe8kPz177Hru\nWUnOGjPfQAu5TG8dGd+0Gd90beSxJcY3dcY3XRt5bInxTZ3xTddGHltifFNnfAsw2sLfAAAAANx2\njLkmEwAAAAC3EUqmr0JVbamqq6rq6qp63qLzrKWqOquqPlVVH1x0ljFU1WFV9faquryqtlfVsxed\naa1U1QFV9d6q+sfZ2H5x0ZnGUFWbqurSqjp30VnWWlV9pKo+UFWXVdW2RedZa1V1l6p6Y1VdWVVX\nVNVDFp1prVTVPWc/t52Pf62q5yw611qpqufO/l75YFX9WVUdsOhMa6mqnj0b2/aN8HPb3e/yqrpr\nVV1QVR+efT1okRmHWGF83z/7+d1SVfvcnXb2xgrj+7XZ353vr6pzquoui8w4xArj+6XZ2C6rqrdV\n1TcuMuNXa7XP0VX1M1XVs5sdTdIKP7sXV9V1y37/PXaRGYdY6edXVc+c/fe3vap+dVH5hlrh5/f6\nZT+7j1TVZYvMOMQK4zu2qt6987N1VZ2wyIxfrRXGdv+qetfs/x3+sqrutMiMyymZ9lJVbUpyRpLv\nSnLvJKdW1b0Xm2pNnZ1ky6JDjOimJD/T3fdO8uAkz9hAP78vJfmO7r5/kmOTbKmqBy840xieneSK\nRYcY0SO7+9h98Xaka+C3k7y1u49Jcv9soJ9jd181+7kdm+SBSb6Q5JwFx1oTVXVIkmclOb6775Ol\nm3mcsthUa6eq7pPkaUlOyNKfy8dV1bcsNtVgZ+fWv8ufl+Rvu/uoJH87256qs3Pr8X0wyROTvGPd\n06y9s3Pr8V2Q5D7dfb8kH0ry/PUOtYbOzq3H92vdfb/Z36HnJnnhrc6ahrOzm8/RVXVYlu6W/bH1\nDrTGzs7u/z/hN3f+DpytyTtVZ2eX8VXVI5OcnOT+3f2tSV6+gFxr5ezsMr7u/oFln1/elOTNiwi2\nRs7Orf98/mqSX5yN74Wz7Sk6O7ce2x8keV533zdLnzl/dr1DrUTJtPdOSHJ1d1/T3TcmeV2W/uLZ\nELr7HUk27J38uvvj3f2+2fN/y9L/5B6y2FRro5f8+2zz9rPHhlp0raoOTfLdWfpLlQmpqjsneXiS\nP0yS7r6xuz+32FSjOTHJP3X3RxcdZA3tl+Rrq2q/JHdI8i8LzrOW7pXkPd39he6+KclFWSorJmuF\n3+UnJ3n17Pmrkzx+XUOtod2Nr7uv6O6rFhRpTa0wvrfN/nwmybuTHLruwdbICuP712WbB2ain19W\n+Rz9m0l+LhMd1063gf9P2N34np7kZd39pdkxn1r3YGtktZ9fVVWSJyX5s3UNtYZWGF8n2TnD586Z\n6OeXFcZ2dL7yDysXJPnedQ21CiXT3jskybXLtndkg5QUtzVVdY8kD0jynsUmWTuzS8kuS/KpJBd0\n94YZ28xvZelD2i2LDjKSTvK2qrqkqk5bdJg1dmSS65P80exyxz+oqgMXHWokp2TCH9J21d3XZelf\nbj+W5ONJ/l93v22xqdbUB5M8rKq+vqrukOSxSQ5bcKYx3L27Pz57/okkd19kGAb50SR/vegQa62q\nXlpV1yb5oUx3JtOtVNXJSa7r7n9cdJYRnT673PGsKV+Ku4Kjs/Q74j1VdVFV/fdFBxrJw5J8srs/\nvOgga+w5SX5t9nfLyzPtWaC72p6vTHb5/uxDn12UTNwmVdXXZWlK6HN2+dezSevum2fTQQ9NcsLs\nMpANoaoel+RT3X3JorOM6Nu7+7gsXY77jKp6+KIDraH9khyX5JXd/YAkn8+0L9fZraraP8lJSf58\n0VnWyux/GE7OUlH4jUkOrKonLzbV2unuK5L87yRvS/LWJJcluXmhoUbWS7cWnvSMituqqnpBli79\nf82is6y17n5Bdx+WpbGdvug8a2FWXP+vbKDSbDdemeSbs7RUw8eT/Ppi46y5/ZLcNUvLbPxskjfM\nZv1sNKdmA/0D2TJPT/Lc2d8tz81sRv0G8aNJfqqqLklyxyQ3LjjPf1Iy7b3r8l9bwkNn+5iIqrp9\nlgqm13T3lK87XtHsMqS3Z2Otr/XQJCdV1UeydJnqd1TVny420tqazRjZORX7nCxdnrtR7EiyY9ns\nujdmqXTaaL4ryfu6+5OLDrKGvjPJP3f39d395Syt1/BtC860prr7D7v7gd398CQ3ZGnNm43mk1X1\nDUky+zrZSz5uq6rqR5I8LskPzYrCjeo12Ycu+xjom7NU0P/j7PPLoUneV1X/baGp1lB3f3L2j5y3\nJHlVNtZnl2Tp88ubZ8tSvDdLs+knu3j77swuhX9iktcvOssInpKvrDP159lAfz67+8rufnR3PzBL\nBeE/LTrTTkqmvXdxkqOq6sjZv1ifkmTrgjMxp9m/PPxhkiu6+zcWnWctVdXmnXebqaqvTfKoJFcu\nNtXa6e7nd/eh3X2PLP1393fdvWFmU1TVgVV1x53Ps7RA6Ia5y2N3fyLJtVV1z9muE5NcvsBIY9mI\n/xL4sSQPrqo7zP4OPTEbaNH2JKmqg2dfD8/SB+3XLjbRKLZm6cN2Zl//YoFZ2EtVtSVLl4uf1N1f\nWHSetVZVRy3bPDkb5PNLd3+guw/u7nvMPr/sSHLc7HfihrCzvJ55QjbQZ5eZtyR5ZJJU1dFJ9k/y\n6YUmWnvfmeTK7t6x6CAj+Jck/2P2/DuSbJjLAZd9drldkp9P8nuLTfQV+y06wNR0901VdXqS87N0\nh52zunv7gmOtmar6sySPSHK3qtqR5EXdvZGmFT40yQ8n+cCyW3T+r4nfCWOnb0jy6tkdEG+X5A3d\nfe6CMzG/uyc5ZzYDe78kr+3uty420pp7ZpLXzAr6a5I8dcF51tSsHHxUkp9YdJa11N3vqao3Jnlf\nli7TuTTJmYtNtebeVFVfn+TLSZ4x9UXpd/e7PMnLsnSZx48l+WiWFnidpBXG99kkr0iyOclfVdVl\n3f2YxaX86q0wvucn+ZokF8x+T7y7u39yYSEHWGF8j539I8QtWfrzuWHGtpE+R6/ws3tEVR2bpUtw\nP5IJ/w5cYXxnJTlrduv4G5M8ZaozCVf587kh1pJc4ef3tCS/PZut9R9JJrnm6Qpj+7qqesbskDcn\n+aMFxbuVmuh/IwAAAADsQ1wuBwAAAMBgSiYAAAAABlMyAQAAADCYkgkAAACAwZRMAAAAAAymZAIA\n1lVV/fteHv+Iqjp39vykqnreOMlW/P6bq+o9VXVpVT1sl9f2q6pfqaoPV9Vls8cLVnmv86rqLrvZ\n/+Kq+v92s/+eVXXh7H2vqKoz12ZUK+bbbY7dHPeRqvpAVb2/qi6qqiPGzAUATIOSCQCYjO7e2t0v\nW+dve2KSD3T3A7r773d57ZeTfGOS+3b3sUkeluT2u75BLblddz+2uz+3F9/7d5L8Zncf2933SvKK\nr3IMt8oy9H2SPLK775fkwiQ/vwbvBwBMnJIJAFiI2QylC6vqjVV1ZVW9pqpq9tqW2b73JXnisnN+\npKr+z+z53avqnKr6x9nj22b7n1xV753N/vn9qto0e5xdVR+czcB57m7y3KPq/2/vzkKtrMIwjv+f\ntNRSBE0bxLHBrCDLisKSlBKLQoWgIihMGqSsLvIijEYIqovIIqEssUkksjC8SNJKMs0JTYO0UMq0\n0ihUMkXt6eJbp7aHfQ5Hd+DQ84PD3t+31/zdbN7zrrW1oGTnzJfUR9Jg4FlgdGmvU035E4E7gYm2\ndwPY3mn78Zr21kl6A1gL9C4ZQCeXzydLWi/pc2BgC8t0GvBj04XtNaVuO0nPSVpWxnt3ud+5jH1l\nmefoVsYyqpRbLWl+TZ/nlueyQdL9bXiUi4FeNf2srVmjhyQ1rcenkp4pz2Z986ywiIiIOPq1P9wD\niIiIiP+1C4HzgC3AImCopOXAq8AI4DtgVgt1pwCf2R4rqR3QWdIg4CZgqO29kl4GbgW+BnrZPh+g\n3pY1qiyhGbZnSLoDmGJ7jKRHgYtt39es/JnAD7Z3tjK/s4DbbS8p/VJehwA3A4Opvo+tBFbUqf88\nsEDSF8A8YHrJhBoPbLd9iaQOwCJJ84BNwFjbO0owa4mkOc3HIqkH1RoPs71RUreaPs8BhgNdgHWS\nptre28ocRwEftPJ5rfa2L5V0HfAYcHUb60VERMRRIJlMERERcTgttf2j7b+AVUA/qiDHRtvf2jbw\nVgt1RwBTAWzvt72damvbEGCZpFXlegCwARgg6UVJo4Adddq7HHinvH8TuOJgJiJpXMl22iSpd7n9\nfVOAqZkrgfdt77K9A5hTpwy2pwODgHeBq6iCRh2AkcBtZY5fAt2pgkgCnpb0FfAxVYbRKXXGchmw\n0PbG0s9vNd3Otb3H9q/A1pr6zX0iaTNwLTCz5ZU5wOzyuoLqWUdERMQxJEGmiIiIOJz21LzfT+NZ\n1qLKRhpc/gbaftz278AFVOcH3QNMa7AfqLKs+kjqAlVAqJzLtB1oV8r80WgntrfYft32aGAfcD7V\nPCfWzLO/7XlUWVs9gCFlLL8AHQ9yLG19JsOBvlTBwSfKvX0c+P2yY7M6TW3/F886IiIijjAJMkVE\nRMSR5hugn6QzyvUtLZSbD0yAf84o6lru3SipZ7nfTVLfsnXsONvvUR1SfVGd9r6g2sIGVbCm+SHf\nB7C9C3gNeElSx6ZxACe0YY4LgTGSOpUg1Q31CpVzk44v70+lyljaDHwETKj57GxJJwFdga1lq2BT\nEKieJcAwSf1L/W4tlGuV7X3Ag1RZVd2oglo9JXUvGVfXH0q7ERERcXTKf5AiIiLiiGJ7t6S7gLmS\ndlEFe7rUKfoA8Iqk8VSZMRNsL5b0CDBP1S+o7QXuBf4EpuvfX1V7uE57E0uZScA2YFwbhjsZeApY\nK2ln6WcG1RlTp7cyx5WSZgGrqbakLWuh6EjgBUm7y/Uk2z9Lmka13WylqoOetgFjgLeBDyWtAZZT\nBezq9b+trPHssiZbgWvaMN96bf0kaSZwr+2nJD0JLKUKhtXtPyIiIo5Nqo46iIiIiIiIiIiIOHTZ\nLhcREREREREREQ1LkCkiIiIiIiIiIhqWIFNERERERERERDQsQaaIiIiIiIiIiGhYgkwRERERERER\nEdGwBJkiIiIiIiIiIqJhCTJFRERERERERETDEmSKiIiIiIiIiIiG/Q3L5sfToIzx9AAAAABJRU5E\nrkJggg==\n",
      "text/plain": [
       "<Figure size 1440x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_to_print = 45\n",
    "aupr_sorted = sorted(performances, reverse=True)\n",
    "indices = np.argsort(performances)[::-1]\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(20, 8))\n",
    "x = sns.barplot(x=indices, y=aupr_sorted)\n",
    "#x.set_xticklabels(indices)\n",
    "ax.set_ylabel('Area Under Precision Recall Curve')\n",
    "ax.set_xlabel('Indices of Grid Search Run')\n",
    "ax.set_ylim([0.6, 0.85])\n",
    "#fig.savefig(os.path.join(training_dir, 'boxplot_best_{}_aupr.png'.format(num_to_print)), dpi=300)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Overlap with Candidate Cancer Genes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "deepwalk_embeddings = pd.read_csv(os.path.join(gridsearch_dir, 'embedding_5'), header=None, skiprows=1, sep=' ')\n",
    "deepwalk_embeddings.columns = ['Node_Id'] + deepwalk_embeddings.columns[1:].tolist()\n",
    "deepwalk_embeddings.set_index('Node_Id', inplace=True)\n",
    "nodes = pd.DataFrame(node_names, columns=['ID', 'Name'])\n",
    "embedding_with_names = deepwalk_embeddings.join(nodes)\n",
    "\n",
    "X_dw = embedding_with_names.set_index('Name').reindex(nodes.Name).drop('ID', axis=1)\n",
    "X_train_dw = X_dw[train_mask.astype(np.bool)]\n",
    "X_test_dw = X_dw[test_mask.astype(np.bool)]\n",
    "y_train_dw = y_train[train_mask.astype(np.bool)]\n",
    "y_test_dw = y_test[test_mask.astype(np.bool)]\n",
    "\n",
    "clf = SVC(kernel='rbf', class_weight='balanced', probability=True)\n",
    "#clf = RandomForestClassifier()\n",
    "#clf = LogisticRegression(class_weight='balanced')\n",
    "clf.fit(X_train_dw, y_train_dw.reshape(-1))\n",
    "pred_deepwalk = clf.predict_proba(X_test_dw)\n",
    "\n",
    "pr, rec, thresholds = precision_recall_curve(y_true=y_test_dw,\n",
    "                                                      probas_pred=pred_deepwalk[:, 1])\n",
    "distances = np.sqrt(np.sum((np.array([1, 1]) - np.array([rec, pr]).T)**2, axis=1))\n",
    "idx = np.argmin(distances)\n",
    "best_threshold_pr = thresholds[idx]\n",
    "\n",
    "pred_all = clf.predict_proba(X_dw)\n",
    "nodes['Prob_Pos'] = pred_all[:, 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((654,), 711)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nodes = pd.DataFrame(node_names, columns=['ID', 'Name'])\n",
    "\n",
    "known_cancer_genes = []\n",
    "candidate_cancer_genes = []\n",
    "n = 0\n",
    "with open('../data/pancancer/NCG/cancergenes_list.txt', 'r') as f:\n",
    "    for line in f.readlines():\n",
    "        n += 1\n",
    "        if n == 1:\n",
    "            continue\n",
    "        l = line.strip().split('\\t')\n",
    "        if len(l) == 2:\n",
    "            known_cancer_genes.append(l[0])\n",
    "            candidate_cancer_genes.append(l[1])\n",
    "        else:\n",
    "            candidate_cancer_genes.append(l[0])\n",
    "\n",
    "known_cancer_genes_innet = nodes[nodes.Name.isin(known_cancer_genes)].Name\n",
    "candidate_cancer_genes_innet = nodes[nodes.Name.isin(candidate_cancer_genes)].Name\n",
    "known_cancer_genes_innet.shape, len(known_cancer_genes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1008x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(14, 8))\n",
    "v = matplotlib_venn.venn3([set(known_cancer_genes_innet),\n",
    "                        set(nodes[nodes.Prob_Pos >= best_threshold_pr].Name),\n",
    "                        set(candidate_cancer_genes_innet)],\n",
    "        set_labels=['Known Cancer Genes', 'DeepWalk Predictions', 'Candidate Cancer Genes'])\n",
    "v.get_patch_by_id('10').set_color('#3d3e3d')\n",
    "if not v.get_patch_by_id('11') is None:\n",
    "    v.get_patch_by_id('11').set_color('#37652d')\n",
    "    v.get_label_by_id('11').set_fontsize(20)\n",
    "v.get_patch_by_id('01').set_color('#ee7600')\n",
    "v.get_patch_by_id('011').set_color('#4d2600')\n",
    "v.get_patch_by_id('001').set_color('#031F6F')\n",
    "v.get_label_by_id('A').set_fontsize(20)\n",
    "v.get_label_by_id('B').set_fontsize(20)\n",
    "v.get_label_by_id('C').set_fontsize(20)\n",
    "v.get_label_by_id('10').set_fontsize(20)\n",
    "v.get_label_by_id('01').set_fontsize(20)\n",
    "if not v.get_patch_by_id('111') is None and not v.get_patch_by_id('101') is None:\n",
    "    v.get_label_by_id('111').set_fontsize(20)\n",
    "    v.get_label_by_id('101').set_fontsize(20)\n",
    "    v.get_patch_by_id('111').set_color('#890707')\n",
    "    v.get_patch_by_id('101').set_color('#6E80B7')\n",
    "v.get_label_by_id('011').set_fontsize(20)\n",
    "v.get_label_by_id('001').set_fontsize(20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>Name</th>\n",
       "      <th>Prob_Pos</th>\n",
       "      <th>degree</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>ENSG00000167323</td>\n",
       "      <td>STIM1</td>\n",
       "      <td>0.191</td>\n",
       "      <td>40.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>ENSG00000144935</td>\n",
       "      <td>TRPC1</td>\n",
       "      <td>0.303</td>\n",
       "      <td>17.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>ENSG00000089250</td>\n",
       "      <td>NOS1</td>\n",
       "      <td>0.512</td>\n",
       "      <td>39.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>ENSG00000058668</td>\n",
       "      <td>ATP2B4</td>\n",
       "      <td>0.179</td>\n",
       "      <td>42.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>ENSG00000069431</td>\n",
       "      <td>ABCC9</td>\n",
       "      <td>0.021</td>\n",
       "      <td>3.000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                ID    Name  Prob_Pos  degree\n",
       "0  ENSG00000167323   STIM1     0.191  40.000\n",
       "1  ENSG00000144935   TRPC1     0.303  17.000\n",
       "2  ENSG00000089250    NOS1     0.512  39.000\n",
       "3  ENSG00000058668  ATP2B4     0.179  42.000\n",
       "4  ENSG00000069431   ABCC9     0.021   3.000"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nodes['degree'] = network.sum(axis=0)\n",
    "nodes.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20.0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nodes[nodes.Name.isin(candidate_cancer_genes_innet)].degree.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "53.0"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nodes[nodes.Name.isin(known_cancer_genes_innet)].degree.median()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
